﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UMLSynthesizer.LangAnalyzer.Elements
{
    public enum ElementKinds
    {
        Accessor,
        ArrayType,
        Class,
        Constructor,
        Delegate,
        Destructor,
        Enum,
        ExternalType,
        Field,
        FieldVariable,
        Interface,
        Method,
        Namespace,
        ParameterVariable,
        Project,
        Property,
        Struct
    }
    /// <summary>
    /// The base for all elements
    /// </summary>
    public interface IElementBase
    {
        /// <summary>
        /// The name of the element
        /// </summary>
        string Identifier { get; }
        /// <summary>
        /// The kind of the element
        /// </summary>
        ElementKinds Kind { get; }
        /// <summary>
        /// The parent container of the element
        /// </summary>
        IElementBase ParentElement { get; }
        /// <summary>
        /// The project that owns this element
        /// </summary>
        IProjectElement ProjectOwner { get; }

        /// <summary>
        /// A dictionary used for remember metric values
        /// </summary>
        Dictionary<LanguageAnalyzer.Metrics, double> MetricDictionary { get; }
    }
}
